package com.psnoted.backend.util;

import org.springframework.util.StringUtils;

import java.util.regex.Pattern;

/**
 * 验证工具类
 * 提供常用的验证方法
 * 
 * @author PSNoted Team
 * @version 1.0.0
 */
public class ValidationUtil {

    // 密钥哈希正则表达式（SHA-256哈希）
    private static final Pattern KEY_HASH_PATTERN = Pattern.compile("^[a-fA-F0-9]{64}$");
    
    // 用户名正则表达式
    private static final Pattern USERNAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_]{3,50}$");

    /**
     * 验证密钥哈希格式
     * 
     * @param keyHash 密钥哈希
     * @return 是否有效
     */
    public static boolean isValidKeyHash(String keyHash) {
        return StringUtils.hasText(keyHash) && KEY_HASH_PATTERN.matcher(keyHash).matches();
    }

    /**
     * 验证用户名格式
     * 
     * @param username 用户名
     * @return 是否有效
     */
    public static boolean isValidUsername(String username) {
        return StringUtils.hasText(username) && USERNAME_PATTERN.matcher(username).matches();
    }

    /**
     * 验证字符串不为空
     * 
     * @param str 字符串
     * @return 是否不为空
     */
    public static boolean isNotEmpty(String str) {
        return StringUtils.hasText(str);
    }

    /**
     * 验证字符串长度
     * 
     * @param str 字符串
     * @param minLength 最小长度
     * @param maxLength 最大长度
     * @return 是否在长度范围内
     */
    public static boolean isLengthValid(String str, int minLength, int maxLength) {
        if (!StringUtils.hasText(str)) {
            return false;
        }
        int length = str.length();
        return length >= minLength && length <= maxLength;
    }

    /**
     * 验证时间戳
     * 
     * @param timestamp 时间戳
     * @return 是否有效
     */
    public static boolean isValidTimestamp(Long timestamp) {
        if (timestamp == null) {
            return false;
        }
        // 检查时间戳是否在合理范围内（2020年到2030年）
        long minTimestamp = 1577836800000L; // 2020-01-01 00:00:00
        long maxTimestamp = 1893456000000L; // 2030-01-01 00:00:00
        return timestamp >= minTimestamp && timestamp <= maxTimestamp;
    }
} 